package dp01;

import java.util.Arrays;

/**
 * 题目：删除并获得点数
 * 题目链接：https://leetcode.cn/problems/delete-and-earn/description/
 * 生产一个新的数组，这个数组下标对应原数组中这个数的总和，这样再用这个新的数组就变成打家劫舍问题了（相邻之间的数不能用）
 * 符合题意的删除n-1和n+1
 */
public class Solution9 {
    public int deleteAndEarn(int[] nums) {
        int n = 10001;
        int[] array = new int[n];
        for (int x:nums) {
            array[x] += x;
        }
        return massage(array);
    }

    public static int massage(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];  //表示该点被选上
        int[] g = new int[n];   //表示该点没被选上
        f[0] = nums[0];
        for (int i = 1; i < n; i++) {
            f[i] = g[i-1] + nums[i];
            g[i] = Math.max(f[i-1],g[i-1]);
        }
        return Math.max(f[n-1],g[n-1]);
    }
}
